<?php

namespace Components\Utils\Funcs;

/**
 * php文件分析器
 * @author vijay
 */
class PhpFileHelper
{
    /**
     * 分析PHP文件，解析其中的 use 列表
     * @param string $fileName 文件名完整路径
     * @return array 引用的别名列表，键是短名称，值是长名称
     * @note 如果文件不存在或不可读，返回空数组
     */
    public static function parseUseList(string $fileName): array
    {
        $preg = "#^use\\s+(?<full>(?:\\w+\\\\)*\\w+)(\\s+as\\s+(?<short>\\w+))?\\s*;$#i";
        if (!file_exists($fileName) || !is_readable($fileName)) {
            return [];
        }
        $fileObj = new \SplFileObject($fileName);
        $map = [];
        foreach ($fileObj as $line) {
            $line = trim($line);
            if (!preg_match($preg, $line, $match)) {
                continue;
            }
            if (isset($match["short"])) {
                $short = $match["short"];
            } else {
                $pos = strrpos($match["full"], "\\");
                if ($pos === false) {
                    $pos = -1;
                }
                $short = substr($match["full"], $pos + 1);
            }
            $map[$short] = $match["full"];
        }
        return $map;
    }
}

# end of file
